package com.hu;

import java.io.IOException;
import java.util.Arrays;

/**
 * @author 00355760
 * @功能：
 * @版本： V1
 * @版权： 信息技术有限公司（http://www.mychery.com/）
 * @作者： 磐石战队开发组  00355760
 * @日期： 2024/9/30 10:30
 */
public class IO {

    // 声明一个 char 类型的数组，用于写入输出流
    private char[] writeBuffer;

    // 定义 writeBuffer 数组的大小，必须 >= 1
    private static final int WRITE_BUFFER_SIZE = 1024;

    // 写入给定字符串中的一部分到输出流中
    public void write(String str, int off, int len) throws IOException {
        // 使用 synchronized 关键字同步代码块，确保线程安全
        synchronized (lock) {
            char cbuf[];
            // 如果 len <= WRITE_BUFFER_SIZE，则使用 writeBuffer 数组进行写入
            if (len <= WRITE_BUFFER_SIZE) {
                // 如果 writeBuffer 为 null，则创建一个大小为 WRITE_BUFFER_SIZE 的新 char 数组
                if (writeBuffer == null) {
                    writeBuffer = new char[WRITE_BUFFER_SIZE];
                }
                cbuf = writeBuffer;
            } else {    // 如果 len > WRITE_BUFFER_SIZE，则不永久分配非常大的缓冲区
                // 创建一个大小为 len 的新 char 数组
                cbuf = new char[len];
            }
            // 将 str 中的一部分（从 off 开始，长度为 len）拷贝到 cbuf 数组中
            str.getChars(off, (off + len), cbuf, 0);
            // 将 cbuf 数组中的数据写入输出流中
            write(Arrays.toString(cbuf), 0, len);
        }
    }
}
